//trebaju nam i neke dodatne funkcije i konstante
#define _ARH_ISPIS_C_
#include <ispis.h>

#include <vrijeme.h>
#include <tipkovnica.h>

char stanje[REDAKA][STUPACA];

void zid()
{
	ispisi("\n[%s:%s]\n", __FILE__, __FUNCTION__);

	vrijeme_t t, korak;
	int znak, tocka;
	int brzina = 2;
	int put = 0;
	int iznak;
	int skok = 2, do_skoka = 40;
	int x, y, x_smjer, y_smjer;

	ispisi("Igra 'zid' ima samo par pravila:\n"
		"*) napraviti sto duzi zid\n"
		"*) ne lupiti u granice zaslona\n"
		"*) ne lupiti u vec izgradjenji zid\n"
		"*) upravljati 'zidanjem' mjenjanjem smjera\n"
		"*) povremeno ostavljati rupe\n");

	ispisi("\nTipke upravljanja su: gore=A, dole=Y, lijevo=K, desno=L, rupa"
		"=(razmak)\n"
		"Brzina gradnje je: %d znaka u sekundi\n"
		"Zelite to promijeniti? (D/N)\n", brzina);

	znak = tipkovnica_dohvati_znak_pr ();
	if (znak == 'D' || znak == 'd') {
		ispisi("Unesite brzinu (broj polja u sekundi: 1-9): ");
		znak = tipkovnica_dohvati_znak();
		if (znak - '0' < 1 || znak - '0' > 9) {
			ispisi("Krivi unos, brzina ostaje %d znaka u sekundu\n",
				brzina);
		}
		else {
			brzina = znak - '0';
		}
	}

	tocka = '*';

	t.sekunde = 0;
	t.nsekunde = 0;

	x = STUPACA / 2;
	y = REDAKA / 2;
	x_smjer = 1;
	y_smjer = 0;
	korak.sekunde = 0;
	korak.nsekunde = (BR1E9 - 1) / brzina;
	
	ispisi("Stisni tipku za nastavak");
	znak = tipkovnica_dohvati_znak_pr();

	arh_obrisi_zaslon();
	arh_postavi_poziciju(x, y);
	arh_ispisi_znak(tocka);

	while(1) {
		put++;
		x+=x_smjer;
		y+=y_smjer;

		if (x < 0 || x >= STUPACA || y < 0 || y >= REDAKA ||
							stanje[y][x] == 1) {

			arh_postavi_poziciju(0, REDAKA - 1);

			ispisi("# Gotovo: vrijeme=%d:%d, put=%d\n",
				t.sekunde, t.nsekunde/1000000, put);

			break;
		}

		stanje[y][x] = 1;
		arh_postavi_poziciju(x, y);
		arh_ispisi_znak(tocka);

		odgodi(korak);

		t.sekunde += korak.sekunde;
		t.nsekunde += korak.nsekunde;
		if (t.nsekunde >= BR1E9) {
			t.sekunde++;
			t.nsekunde -= BR1E9;
		}

		znak = 0;
		iznak = tipkovnica_dohvati(ZNAK, &znak, 1, FALSE, FALSE);
		if (iznak != -1) {
			arh_postavi_poziciju(0, REDAKA - 1);
			arh_ispisi_znak(znak);
		}
		else {
			arh_postavi_poziciju(0, REDAKA - 1);
			arh_ispisi_znak('X');
		}

		switch(znak) {
		case 'k':
		case 'K':
			x_smjer = -1;
			y_smjer = 0;
			break;

		case 'l':
		case 'L':
			x_smjer = 1;
			y_smjer = 0;
			break;

		case 'a':
		case 'A':
			x_smjer = 0;
			y_smjer = -1;
			break;

		case 'y':
		case 'Y':
			x_smjer = 0;
			y_smjer = 1;
			break;

		case ' ':
			if (do_skoka <= 0) {
				x += skok * x_smjer;
				y += skok * y_smjer;
				put += skok;
				do_skoka = 40;
			}
			break;
		}
		do_skoka--;
	}
}

